﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2022   保留所有权利。
 * CLR版本：4.0.30319.42000
 * 机器名称：DESKTOP-UL84BU5
 * 公司名称：
 * 命名空间：KingerRobot.WanliMDC.Biz
 * 唯一标识：a1089e9a-5aa4-4134-b6e1-794b834ff5e1
 * 文件名：CuringRequestMaterial
 * 当前用户域：DESKTOP-UL84BU5
 * 
 * 创建者：zzl
 * 电子邮箱：1003590782@qq.com
 * 创建时间：2022/6/8 13:21:46
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace KingerRobot.MexicoSailunMDC.Biz;

/// <summary>
/// 出库虚拟扫描
/// EMS虚拟扫描
/// </summary>

internal class SpinScannerVirtualBiz : K8.MDCBB.Biz
{
    private const string ClassName = nameof(SpinScannerVirtualBiz);


    #region 配置参数
    private ParamData Param { get; set; }
    // {"LineScannerLoc":"D排硫化旋转扫描仪","StationNo":10120701,"LineScannerName":20120701}
    class ParamData
    {

        /// <summary>
        /// 扫描仪位置ID
        /// </summary>
        public long LineScannerLoc { get; set; }
        ///// <summary>
        ///// 线体编号
        ///// </summary>
        //public string StationNo { get; set; }
        ///// <summary>
        ///// 扫描仪名称
        ///// </summary>
        //public string LineScannerName { get; set; }
    }
    #endregion

    #region PLC 通讯参数
    private ValueData Data { get; set; }
    class ValueData
    {
        /// <summary>
        /// 读取任务号（上段线体任务读取后【有值】）才下传新任务
        /// </summary>
        public int RWorkNo { get; set; }
    }
    #endregion

    #region 缓存
    private CacheData Cache { get; set; }
    class CacheData
    {
        /// <summary>
        /// 产品条码
        /// </summary>
        public int RWorkNo { get; set; }

    }
    #endregion

    #region 实时日志
    private StepData Step { get; set; }
    class StepData
    {
        private string _msg = string.Empty;
        public string StepMsg
        {
            get
            {
                return this._msg;
            }
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    this._msg = string.Empty;
                    return;
                }
                this._msg = $"{ClassName}|{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}>>{value}";
            }
        }
    }
    private void StepMsg(string msg)
    {
        this.Step.StepMsg = msg;
        WriteLog(msg);
    }
    #endregion

    #region 文件日志（运行需要 Nlog 配置）
    private void WriteLog(string message)
    {
        K8.LSF.Client.Log(new K8.LSF.Log { Data = message });
    }
    #endregion

    /// <summary>
    /// 和 PLC 通讯对象
    /// </summary>
    private BizData BizData { get; set; }
    public int Execute(BizData writer)
    {
        // Excute 方法外使用 BizData
        this.BizData = writer;

        // 返回参数
        var result = 0;


        if (Data.RWorkNo == Cache.RWorkNo || Data.RWorkNo <= 0)
        {
            this.StepMsg($"{Data.RWorkNo} 在虚拟硫化位已执行.");

            return result;
        }

        var service = K8.RSF.Client.Create<IRotateScanVirtualService>();
        // 完成
        var num = service.UpdateTaskScanLoc(Param.LineScannerLoc, Data.RWorkNo);
        if (num > 0)
        {
            Cache.RWorkNo = Data.RWorkNo;
        }


        return result;
    }
}

